package com.demo.shangguigu.completableFuture;

import java.util.concurrent.CompletableFuture;

public class CompletableFutureAPI3Demo
{
    public static void main(String[] args)
    {
        CompletableFuture.supplyAsync(() -> {
            return 1;
        }).thenApply(f ->{
            return f + 2;
        }).thenApply(f ->{
            return f + 3;
        }).thenAccept(System.out::println);
        CompletableFuture.runAsync(()->{
            System.out.println("woshi renusn");
        }).supplyAsync(()->{
            return 1;
        }).thenApply(f->{
            return f + 2;
        }).thenAccept(System.out::println);
        // 上一个任务执行完成 直接执行下一个
//        System.out.println(CompletableFuture.supplyAsync(() -> "resultA").thenRun(() -> {}).join());//
//        // 下一个任务指向需要上一个的执行结果
//        System.out.println(CompletableFuture.supplyAsync(() -> "resultA").thenAccept(r -> System.out.println(r)).join());
//       // 需要上一个任务的执行结果 并返回当前任务的 结果
//        System.out.println(CompletableFuture.supplyAsync(() -> "resultA").thenApply(r -> r + "resultB").join());
//        CompletableFuture.runAsync(()->{
//
//            System.out.println("woshi renusn");
//            try {
//                Thread.sleep(2000);
//            } catch (InterruptedException e) {
//                throw new RuntimeException(e);
//            }
//        }).thenRunAsync(()->{
//            System.out.println("等你结束woshi renusn");
//        }).join();
//        System.out.println("我去做别的===");
//        List<CompletableFuture> futures=new ArrayList<>();
//        List<String> list=new ArrayList<>();
//       futures.add(CompletableFuture.runAsync(()->{
//           System.out.println("线程一执行");
//        }).exceptionally(e->{
//
//            list.add("异常");
//            return null;
//        }));
//       futures.add( CompletableFuture.runAsync(()->{
//            int a=0;
//           // int b=1/a;
//           System.out.println("jjjjj");
//        }).exceptionally(e->{
//            list.add("kk");
//            return null;
//        }));
//
//       futures.forEach(f->{
//           f.join();
//       });
//        System.out.println("执行完成");
//        if(CollUtil.isNotEmpty(list)){
//            System.out.println(list);
//        }
    }
}
